/**
 * @desc 深拷贝数据
 * @param {Object} data - 原数据
 * @param {WeakMap} hash - 缓存值
 * @return {Object} 返回深拷贝后的数据
 * */
function deepCopy(data: any, hash = new WeakMap()) {
  try {
    // 特殊值: 不管函数
    if (data == null) return data
    if (data instanceof Date) return new Date(data)
    if (data instanceof RegExp) return new RegExp(data)
    if (typeof data !== "object") return data
    if (hash.get(data)) return hash.get(data) // weakMap解决循环引用
    const copy = new data.constructor() // [Function: Object] [Function: Array]
    hash.set(data, copy)
    for (let key in data) {
      if (data.hasOwnProperty(key)) {
        copy[key] = deepCopy(data[key], hash)
      }
    }
    return copy
  } catch (error) {
    console.log("deep copy Error!!!!", error);
    return data
  }
}

export {
  deepCopy
}
